# 这里面放置一些基础的操作函数：打开浏览器，点击元素，输入文本，获取元素文本信息，获取元素属性值
# 起一个类名为Base
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.webelement import WebElement
from selenium.webdriver.support.wait import WebDriverWait


class Base:
    # 假设，浏览器驱动对象，放到类的成员变量中
    def __init__(self, driver,url):
        # 创建浏览器驱动对象
        self.__driver = driver
        # 打开浏览器URl
        self.__driver.get(url)
        # 窗口最大化
        self.__driver.maximize_window()

    # 定义一个定位元素的方法
        # ->WebElement告诉调用者返回的这是一个元素
    def __find_element_wait(self,loc)->WebElement: #loc是一个元组，元组里面放的是定位方式，定位值
    #显示等待
        return WebDriverWait(self.__driver,10).until(lambda x:x.find_element(*loc))
    #向输入框内输入文本
    def element_send_keys(self,loc,values):
        self.__find_element_wait(loc).send_keys(values)
    #点击元素
    def element_click(self,loc):
        self.__find_element_wait(loc).click()
    #获取当前页面的url
    def get_current_url(self):
        return self.__driver.current_url
    # 获取元素文本信息
    def get_element_text(self,loc):
        return self.__find_element_wait(loc).text
    # 定义一个方法，关闭浏览器
    def quit(self):
        self.__driver.quit()

# if __name__ == '__main__':  #测试代码
#     base = Base(webdriver.Edge(),'https://www.baidu.com/')
#     base.element_send_keys((By.CSS_SELECTOR,'#kw'),'hahahaha')
#     time.sleep(3)
#     base.quit()
